
// 测试访问修饰符
// public 表示在类内部以及类外部都可以使用 (这是默认修饰符) [公开的]
// protected 表示在本类内 以及 子类 中可以使用 [受保护的]
// private 表示仅在本类内部可以使用 [私有的]

class Animal {
    // 实例属性
    protected type: string ;
    // 构造函数
    constructor( type: string ){
        this.type = type ;
    }
    // 实例方法
    toString(): string{
        return `{ type: ${this.type} }`;
    }
}

const birds = new Animal( '禽类' );
// 在Animal类外部不可以访问 被 protected 、private 修饰的 type 属性
// console.log( birds.type );
console.log( birds.toString() );

class Beast extends Animal {
    private name: string ;
    constructor( name: string ){
        super( '兽类' );
        this.name = name ;
    }
    // 覆盖从父类继承的 toString 方法
    toString(): string{
        return `${ this.constructor.name} { type: '${this.type}' , name: '${this.name}' }`;
    }
}

const beast = new Beast( '熊猫儿' );
console.log( beast );
console.log( beast.toString() );



